package 枚举类和注解.注解;

/**
 * @Projectname java_based
 * @Filename AnnotationTest1
 * @Author an
 * @Data 2022/7/18 15:23
 * @Description TODO
 */
import org.junit.Test;

import java.lang.annotation.*;
import java.util.ArrayList;
import java.util.Date;

import static java.lang.annotation.ElementType.*;

/**
 * 注解的使用
 *
 *   4.jdk 提供的4种元注解
 *     元注解：对现有的注解进行解释说明的注解
 *     Retention:指定所修饰的 Annotation 的生命周期：SOURCE\CLASS（默认行为）\RUNTIME
 *               只有声明为RUNTIME生命周期的注解，才能通过反射获取。
 *     Target:用于指定被修饰的 Annotation 能用于修饰哪些程序元素
 *     *******出现的频率较低*******
 *     Documented:表示所修饰的注解在被javadoc解析时，保留下来。
 *     Inherited:被它修饰的 Annotation 将具有继承性。
 *
 * 5.通过反射获取注解信息 ---到反射内容时系统讲解
 */
public class AnnotationTest1 {
    public static void main(String[] args) {

    }

    @Test
    public void testGetAnnotation(){
        Class clazz = Student.class;
        Annotation[] annotations = clazz.getAnnotations();
        for(int i = 0;i < annotations.length;i++){
            System.out.println(annotations[i]);
        }
    }
}

@MyAnnotation(value = "hi")
class Person1{
    private String name;
    private int age;

    public Person1() {
        super();
    }

    @MyAnnotation
    public Person1(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @MyAnnotation
    public void walk(){
        System.out.println("学习中……");
    }
    public void eat(){
        System.out.println("摸鱼中……");
    }
}



//@Inherited
//@Repeatable(MyAnnotations.class)
//@Retention(RetentionPolicy.RUNTIME)
//@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE,TYPE_PARAMETER,TYPE_USE})
//@interface MyAnnotation {
//    String value() default "hello";
//}
